package leetCode.solution;

/**
 * 给你一个由 '1'（陆地）和 '0'（水）组成的的二维网格，请你计算网格中岛屿的数量。
 * 
 * 岛屿总是被水包围，并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
 * 
 * 此外，你可以假设该网格的四条边均被水包围。
 * 
 * @author jerry
 * @ClassName: numIslands_200
 * @Description:TODO(描述这个类的作用)
 * @date 2022年12月9日 上午10:57:18
 */
public class numIslands_200 {
	
	public static void main(String[] args) {
		char[][] arr = new char[][]{{'1','1','0','1','0'},{'1','1','0','1','0'},{'1','1','0','0','0'},{'0','0','0','0','0'}};
		System.out.println(new numIslands_200().numIslands(arr));
	}
	
	public int numIslands(char[][] grid) {
		int nums = 0;
		if(grid==null || grid.length==0 || grid[0].length==0) {
			return nums;
		}
		
		for(int i = 0;i<grid.length;i++) {
			for(int j = 0;j<grid[0].length;j++) {
				if(grid[i][j]=='1') {
					nums++;
					infact(grid, i, j);
				}
			}
		}
		return nums;
    }
	
	private void infact(char[][] grid, int i, int j) {
		if(i>=0 &&i<grid.length &&j>=0 && j<grid[0].length && grid[i][j]=='1') {
			grid[i][j]=2;
			infact(grid, i-1, j);
			infact(grid, i, j-1);
			infact(grid, i+1, j);
			infact(grid, i, j+1);
		}
	}

}
